www.gusucode.com > 精通MATLAB最优化计算全书代码 程序源码 > 随书源码_精通MATLAB最优化计算/第6章 无约束一维极值问题/minPWX.m

    function [x,minf] = minPWX(f,a,b,eps)
format long;
if nargin == 3
    eps = 1.0e-6;
end

t0 = (a+b)/2;
k = 0;
tol = 1;

while tol>eps
    fa = subs(f,findsym(f),a);
    fb = subs(f,findsym(f),b);
    ft0 = subs(f,findsym(f),t0);
    tu = fa*(b^2 - t0^2)+fb*(t0^2 - a^2)+ft0*(a^2 - b^2);
    td = fa*(b - t0)+fb*(t0 - a)+ft0*(a - b);
    t1 = tu/2/td;
    
    ft1 = subs(f,findsym(f),t1);
    tol = abs(t1 - t0);
    if ft1 <= ft0
        if t1<= t0
            b = t0;
            t0 = t1;
        else
            a = t0;
            t0 = t1;
        end
        k = k+1;
    else
       if t1<= t0
           a = t1;
       else
           b = t1;
       end
       k = k+1;
    end
end

x = t1;
minf =  subs(f,findsym(f),x);
format short;